/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
  if (s.length < 2) return s;
  let res = "";
  for (let i = 0; i < s.length; i++) {
    helper(i, i);
    helper(i, i + 1);
  }
  // 相当于是中心扩展函数
  function helper(left, right) {
    while (left >= 0 && right < s.length && s[left] === s[right]) {
      left--;
      right++;
    }
    if (right - left - 1 > res.length) {
      res = s.slice(left + 1, right);
    }
  }
  return res;
};

/**
 * @param {string} s
 * @return {string}
 */
// 这个是 ai 的回答，但是我觉得好像是差不多的效果
/* 
方法思路
遍历字符串：对于字符串中的每个字符，分别以该字符为中心（奇数长度回文）和以该字符及其下一个字符为中心（偶数长度回文）进行扩展。
扩展检查：在扩展过程中，比较左右字符是否相等，如果相等则继续扩展，直到左右字符不相等或超出字符串边界。
记录最长回文：每次扩展结束后，记录当前找到的回文的长度和起始位置，如果比之前记录的最长回文更长，则更新最长回文的信息。
返回结果：根据记录的最长回文的起始位置和长度，截取并返回最长回文子串。
*/
// 不对，我发现上面的回答好像更加的理解。不管了，到时候尝试着记忆这两个解决方法。
var longestPalindrome = function (s) {
  if (s.length < 2) return s;

  let start = 0;
  let maxLength = 1;

  // 中心扩展函数
  function expandAroundCenter(left, right) {
    while (left >= 0 && right < s.length && s[left] === s[right]) {
      const currentLength = right - left + 1;
      if (currentLength > maxLength) {
        maxLength = currentLength;
        start = left;
      }
      left--;
      right++;
    }
  }

  // 遍历每个字符作为中心
  for (let i = 0; i < s.length; i++) {
    // 奇数长度回文
    expandAroundCenter(i, i);
    // 偶数长度回文
    expandAroundCenter(i, i + 1);
  }

  return s.substring(start, start + maxLength);
};